package com.example.designpatterns.behavioral.strategy.core;

import com.example.designpatterns.behavioral.strategy.commons.MsgResult;

/**
 * 支付渠道
 * 规定了所有支付渠道的通用行为
 *
 * @author scott
 */
public abstract class AbstractPayment {

    /**
     * 获取支付方式名称
     *
     * @return 支付方式
     */
    public abstract String getName();

    /**
     * 通用逻辑被放到抽象类里实现
     *
     * @param uid    uid
     * @param amount 金额
     * @return 返回结果
     */
    public MsgResult pay(String uid, double amount) {
        // 余额是否足够
        if (queryBalance(uid) < amount) {
            return new MsgResult(500, "支付失败", "余额不足");
        }
        return new MsgResult(200, "支付成功", "支付金额" + amount);
    }

    /**
     * 查询余额
     *
     * @param uid uid
     * @return 用户余额
     */
    protected abstract double queryBalance(String uid);

}
